package main

type MinStack struct {
	data []int
	min  []int
}

func Constructor() MinStack {
	return MinStack{
		data: []int{},
		min:  []int{}, //另一个栈记录最小元素
	}
}

func (this *MinStack) Push(val int) {
	this.data = append(this.data, val)
	if len(this.min) == 0 || this.min[len(this.min)-1] >= val {
		this.min = append(this.min, val)
	}
}

func (this *MinStack) Pop() {
	size := len(this.data)
	// 判断要弹出的元素是不是最小的
	val := this.data[size-1]
	this.data = this.data[:size-1]
	// 最小的
	if val == this.min[len(this.min)-1] {
		this.min = this.min[:len(this.min)-1]
	}
}

func (this *MinStack) Top() int {
	return this.data[len(this.data)-1]
}

func (this *MinStack) GetMin() int {
	return this.min[len(this.min)-1]
}
